package com.gel.shortLink.dao.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.gel.shortLink.dao.entity.LinkAccessLogsDO;
import com.gel.shortLink.dao.entity.LinkAccessStatsDO;
import com.gel.shortLink.dto.req.ShortLinkGroupStatsAccessRecordReqDTO;
import com.gel.shortLink.dto.req.ShortLinkGroupStatsReqDTO;
import com.gel.shortLink.dto.req.ShortLinkStatsReqDTO;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 访问日志监控持久层
 * 公众号：马丁玩编程，回复：加群，添加马哥微信（备注：link）获取项目资料
 */
public interface LinkAccessLogsMapper extends BaseMapper<LinkAccessLogsDO>{
    /*根据短链接获取指定日期内PV、UV、UIP数据*/
    LinkAccessStatsDO findPvUvUidStatsByShortLink( ShortLinkStatsReqDTO requestParam);
    /*根据短链接获取指定日期内高频访问ip*/
    List<HashMap<String, Object>> listTopIpByShortLink( ShortLinkStatsReqDTO requestParam);
    /*根据短链接获取指定日期内新旧访客*/
    HashMap<String, Object> findUvTypeCntByShortLink(ShortLinkStatsReqDTO requestParam);
    /*根据分组获取指定日期内PV、UV、UIP数据*/
    LinkAccessStatsDO findPvUvUidStatsByGroup(ShortLinkGroupStatsReqDTO requestParam);
    /*根据分组定日期内高频访问ip*/
    List<HashMap<String, Object>> listTopIpByGroup(ShortLinkGroupStatsReqDTO requestParam);
    /*根据分组指定日期内新旧访客*/
    HashMap<String, Object> findUvTypeCntByGroup(ShortLinkGroupStatsReqDTO requestParam);

    @MapKey("user")
    List<Map<String, Object>> selectUvTypeByUsers( @Param("gid") String gid,
                                                   @Param("fullShortUrl") String fullShortUrl,
                                                   @Param("enableStatus") Integer enableStatus,
                                                   @Param("startDate") String startDate,
                                                   @Param("endDate") String endDate,
                                                   @Param("userList") List<String> userList);

    IPage<LinkAccessLogsDO> selectGroupPage(ShortLinkGroupStatsAccessRecordReqDTO requestParam);
    @MapKey("user")
    List<Map<String, Object>> selectGroupUvTypeByUsers( @Param("gid") String gid,
                                                        @Param("startDate") String startDate,
                                                        @Param("endDate") String endDate,
                                                        @Param("userList") List<String> userList);
}
